﻿using System;

namespace SverigesRadio.SverigesRadioApp.Business
{
    /// <summary>
    /// Används alltid istället för DateTime.Now och DateTime.Today för kunna simulera förutsägbara tidpunkter i tester
    /// </summary>
    public class SystemTime
    {
        [ThreadStatic]
        private static DateTime? staticNow;

        public static DateTime Now
        {
            get { return staticNow ?? DateTime.Now; }
        }

        public static DateTime Today
        {
            get { return Now.Date; }
        }

        public static void SetStaticNow(DateTime? now)
        {
            staticNow = now;
        }

        public static void IncrementStaticNow(TimeSpan systemTimeIncrement)
        {
            if (!staticNow.HasValue)
                throw new InvalidOperationException();

            staticNow = staticNow.Value.Add(systemTimeIncrement);

        }
    }
}
